let fs = require('fs')
// const Promise = require('./promise')

// error first 错误第一 异步方法无法通过 try catch 捕获异常
// fs.readFile('./node/name.txt', 'utf8', (err, data) => {
//     fs.readFile(data, 'utf8', (err, data) => {
//         console.log(data)
//     })
// })

function read(filename) {
    return new Promise((resolve, reject) => {
        fs.readFile(filename, 'utf8', (err, data) => {
            if(err) {
               return reject(err)
            }
            resolve(data)
        })
    })
}
// 1. promise 成功 和 失败的 回调的 返回值 可以传递到 外层的下一个 then
// 2. 如果返回的 是 普通值的话(传递到下一次的成功中, 不是错误 不是 promise 就是普通值), 可能还有 promise 的情况(一定会走到下一次的失败), 出错的情况(会采用promise的状态, 决定走下一次的成功还是失败)
// 3. 错误处理  如果离自己最忌的 then 没有错误处理(没有写错误处理函数) 会向下找
// 4. 每次执行完 promise.then 方法后 返回的都是一个"新的 promise" (promise 一旦成功或者失败就不能修改状态)
read('./node/name.txt').then(data => {
    // read(data).then(data => {
    //     console.log(data)
    // }, err => {
    //     console.log(err)
    // })
    // return 100
    // return read(data)
    return read(data + '1')
    // 不能写 read(data + '1') 因为此时默认返回 undefined 下个 then 走 resolve, 而且当前的 read(data + '1') 可能异步执行
}, 
// (err) => {
//     console.log(err) 
//     return undefined
// }
).then(data => {
    console.log('---', data)
}, (err) => {
    // console.log('----', '错误')
    return undefined
}).then(data => {
    console.log('---', data)
}, err => {
    console.log('-----', err)
})

